//package com.ztesoft.huangfu.learning.springboot.springboottest.utils;
//
//import javax.crypto.Mac;
//import javax.crypto.spec.SecretKeySpec;
//import java.io.UnsupportedEncodingException;
//import java.net.URLEncoder;
//import java.security.InvalidKeyException;
//import java.security.NoSuchAlgorithmException;
//import java.text.SimpleDateFormat;
//import java.util.*;
//
///**
// * Created with IntelliJ IDEA.
// * Author: huangfu.daohui
// * Date: 2018/7/26
// * Time: 13:57
// * Version: 1.0
// * Description:
// **/
//public class TestAliyun {
//
//
//    //预定义编码方法。
//    private static final String ENCODING = "UTF-8";
//
//    private static String percentEncode(String value) throws UnsupportedEncodingException {
//        return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null;
//    }
//
//    //预定义编码时间格式 Timestamp。参数 Timestamp 必须符合 ISO8601 规范，并需要使用 UTC 时间。
//    private static final String ISO8601_DATE_FORMAT = "YYYY-MM-DD'T'HH:mm:ss'Z'";
//
//    private static String formatIso8601Date(Date date) {
//        SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT);
//        df.setTimeZone(new SimpleTimeZone(0, "GMT"));
//        return df.format(date);
//    }
//
//    // 构造请求字符串。
//
//    public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {
//        final String HTTP_METHOD = "GET";
//        Map parameters = new HashMap();
//        // 输入请求参数
//        parameters.put("Action", "DescribeRegions");
//        parameters.put("Version", "2014-05-26");
//        parameters.put("AccessKeyId", "testid");
//        parameters.put("Timestamp", formatIso8601Date(new Date()));
//        parameters.put("SignatureMethod", "HMAC-SHA1");
//        parameters.put("SignatureVersion", "1.0");
//        parameters.put("SignatureNonce", UUID.randomUUID().toString());
//        parameters.put("Format", "XML");
//        // 排序请求参数
//        String[] sortedKeys = (String[]) parameters.keySet().toArray(new String[]{});
//        Arrays.sort(sortedKeys);
//        final String SEPARATOR = "&";
//        // 构造 stringToSign 字符串
//        StringBuilder stringToSign = new StringBuilder();
//        stringToSign.append(HTTP_METHOD).append(SEPARATOR);
//        stringToSign.append(percentEncode("/")).append(SEPARATOR);
//        StringBuilder canonicalizedQueryString = new StringBuilder();
//        for (String key : sortedKeys) {
//        // 这里注意编码 key 和 value
//            canonicalizedQueryString.append("&")
//                    .append(percentEncode(key)).append("=")
//                    .append(percentEncode((String) parameters.get(key)));
//        }
//        // 这里注意编码 canonicalizedQueryString
//        stringToSign.append(percentEncode(
//                canonicalizedQueryString.toString().substring(1)));
//        // 以下是一段计算签名的示例代码
//        final String ALGORITHM = "HmacSHA1";
//        final String ENCODING = "UTF-8";
//        String key = "testsecret&";
//        Mac mac = Mac.getInstance(ALGORITHM);
//        mac.init(new SecretKeySpec(key.getBytes(ENCODING), ALGORITHM));
//        byte[] signData = mac.doFinal(stringToSign.getBytes(ENCODING));
//        String signature = new String(Base64.encodeBase64(signData));
//    }
//}
